﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Cryptography;
using System.Text;

namespace DemoPersonalizeSearch
{
    public static class MyExtensionMethod
    {

        private static string GetMd5Hash(MD5 md5Hash, string input)
        {

            // Convert the input string to a byte array and compute the hash. 
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes 
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data  
            // and format each one as a hexadecimal string. 
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string. 
            return sBuilder.ToString();
        }

        // Verify a hash against a string. 
        private static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
        {
            // Hash the input. 
            string hashOfInput = GetMd5Hash(md5Hash, input);

            // Create a StringComparer an compare the hashes.
            StringComparer comparer = StringComparer.OrdinalIgnoreCase;

            if (0 == comparer.Compare(hashOfInput, hash))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public static string GetMd5Hash(this string input)
        {
            MD5 md5 = MD5.Create();
            string hash =  GetMd5Hash(md5, input);
            return hash;

        }


        public static string ToStringFomated(this List<TagItem> listTags) 
        {
            string str = "";
            foreach (TagItem s in listTags)
            {
                str += String.Format("{0}<<{1}>> ",s.TagName,s.Weight );
            }
            return str;
        }
        public static string ToStringUser(this List<TagItem> list,string query)
        {
            string str = "";
            string[] ss = query.Split(new string[]{"+"," "},StringSplitOptions.RemoveEmptyEntries);
            foreach (TagItem s in list)
            {
                if (ss.Contains(s.TagName.ToLower()))
                    str += String.Format("<span style='color:black;font-weight:bold;'>{0}</span>[{1}] ", s.TagName, s.Weight);
                else str += String.Format("{0}[{1}] ", s.TagName, s.Weight);
            }
            return str;
        }

        public static string RemoveAllDoubleSpace(this string input)
        {
            input = input.Trim();
            while (input.IndexOf("  ") >= 0)
            {
                input = input.Replace("  ", " ");
            }
            return input;
        }
        public static double GetWeightByTagName(this UserItem ui,string tagname)
        {
            var u = ui.Tags.Where(x => x.TagName.ToLower() == tagname.ToLower()).FirstOrDefault();
            if (u != null)
            {
                return u.Weight;
            }
            return 0;
        }
    }
}